While current compilers of program code are designed to generate binaries that take advantage of the latest developments of current instruction set architectures (ISA), binaries generated based on a prior instruction set architecture are not able to employ these latest developments. Binary translation is a common method used to translate binaries of given program code/applications that are based on one instruction set architecture into binaries of given program code/applications that are based on a different instruction set architecture or a different subset of the same instruction set architecture. The different instruction set architecture may be a different architecture or an advanced version of the prior instruction set architecture.
Typically, binary translated programs are expected to deliver precisely the same functionality as provided by the original binary translated program that was based on the prior instruction set architecture. In other words, binary translations are typically expected to fully preserve program semantics as defined by the previous instruction set architecture, thereby providing full backward compatibility. Accordingly, the requirements of the previous instruction set architecture can include those associated with normal instruction flow, data precision, behavior of exceptions and other side effects of program execution defined by this previous instruction set architecture.
This semantic requirement typically confines the power of the binary translation—either by posing certain limitations on the translatable binaries or by restricting the amount of advantage the binary translation can take of the new instruction set architecture. For example, if the two different instruction set architectures do not support the same floating-point formats, widths or precisions, the binary translation between these instruction set architectures of floating-point operations may be difficult and/or inefficient.